package com.tensquare.user.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;

import com.alibaba.fastjson.JSON;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import com.tensquare.user.mapper.UserMapper;
import com.tensquare.user.domain.User;
import com.tensquare.user.service.IUserService;

import javax.print.attribute.HashAttributeSet;

/**
 * 用户Service业务层处理
 * 
 * @author hbxfwf
 * @date 2021-08-25
 */
@Service
public class UserServiceImpl implements IUserService 
{
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * 查询用户
     * 
     * @param id 用户主键
     * @return 用户
     */
    @Override
    public User selectUserById(String id)
    {
        return userMapper.selectUserById(id);
    }

    /**
     * 查询用户列表
     * 
     * @param user 用户
     * @return 用户
     */
    @Override
    public List<User> selectUserList(User user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 新增用户
     * 
     * @param user 用户
     * @return 结果
     */
    @Override
    public int insertUser(User user)
    {
        return userMapper.insertUser(user);
    }

    /**
     * 修改用户
     * 
     * @param user 用户
     * @return 结果
     */
    @Override
    public int updateUser(User user)
    {
        return userMapper.updateUser(user);
    }

    /**
     * 批量删除用户
     * 
     * @param ids 需要删除的用户主键
     * @return 结果
     */
    @Override
    public int deleteUserByIds(String[] ids)
    {
        return userMapper.deleteUserByIds(ids);
    }

    /**
     * 删除用户信息
     * 
     * @param id 用户主键
     * @return 结果
     */
    @Override
    public int deleteUserById(String id)
    {
        return userMapper.deleteUserById(id);
    }

    @Override
    public User findByUid(String uid) {
        User user = new User();
        user.setUid(uid);
        List<User> users = this.selectUserList(user);
        if(users != null && users.size() > 0){
            return users.get(0);
        }
        return null;

    }

    /**
     * 功能: 生成验证码
     * 参数:
     * 返回值: void
     * 时间: 2021/9/8 15:47
     */
    @Override
    public void getCode(String phone) {
        //1.生成六位数的验证码
        int min = 100000;   //六位数的最小值
        int max = 999999;   //六位数的最大值
        Random random = new Random();
        int code = random.nextInt(max-min);  //得到一个[0,max-min)范围的随机数
        if(code < min){
            code = code + min ;
        }
        //2. 将验证码放到redis中
        redisTemplate.opsForValue().set(phone,code + "",10, TimeUnit.DAYS);
        //3. 发送消息给消息监听方
        //3.1 定义要发送的消息
        Map<String,String> map = new HashMap<>();
        map.put("phone",phone);
        Map codeMap = new HashMap();
        codeMap.put("code",code + "");
        map.put("code", JSON.toJSONString(codeMap));  //"{\"code\":\"1111\"}"

        System.out.println("map = " + map);
        //3.2 发送消息
        rabbitTemplate.convertAndSend("sms",map);
    }
}
